home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Games / WormWars / Source / system.h < prev    next >
C/C++ Source or Header  |  2002-10-21  |  51KB  |  1,110 lines

  1. /* $Filename: WormWars/Source/system.h
  2.  * $VER:      WormWars 7.21a for Amiga
  3.  *
  4.  * © Copyright 2002 James R. Jacobs. Freely distributable.
  5.  
  6. #INCLUDES -------------------------------------------------------------- */
  7.  
  8. #include <exec/exec.h>
  9. #include <exec/memory.h>
  10. #include <pragmas/exec_pragmas.h>
  11. #include <clib/exec_protos.h>
  12. #include <exec/execbase.h>
  13.  
  14. #include <intuition/intuition.h>
  15. #include <intuition/gadgetclass.h>   /* STRINGA_ReplaceMode */
  16. #include <intuition/intuitionbase.h> /* struct IntuitionBase */
  17. #include <pragmas/intuition_pragmas.h>
  18.  
  19. // #include <pragmas/asl_pragmas.h>
  20. #include <libraries/asl.h>           /* ASL_FileRequest */
  21.  
  22. #include <libraries/gadtools.h>      /* struct StringInfo */
  23. #include <pragmas/gadtools_pragmas.h>
  24.  
  25. #include <devices/audio.h>
  26. #include <devices/gameport.h>        /* struct GamePortTrigger */
  27.  
  28. // #include <pragmas/dos_pragmas.h>
  29. #include <dos/dosextens.h>           /* struct Process */
  30. #include <dos/dos.h>
  31.  
  32. #include <graphics/gfxbase.h>
  33. #include <graphics/displayinfo.h>    /* PAL_MONITOR_ID, etc. */
  34. #include <pragmas/graphics_pragmas.h>
  35.  
  36. #include <libraries/iffparse.h>
  37. #include <pragmas/iffparse_pragmas.h>
  38.  
  39. #include <utility/date.h>            /* struct DateStamp */
  40. #include <pragmas/utility_pragmas.h>
  41.  
  42. #include <workbench/workbench.h>     /* struct DiskObject */
  43. #include <pragmas/wb_pragmas.h>
  44.  
  45. #include <hardware/cia.h>            /* struct CIA */
  46.  
  47. #include <libraries/lowlevel.h>
  48.  
  49. // #include <libraries/amigaguide.h>
  50.  
  51. #include <stdio.h>                   /* FILE, printf() */
  52. #include <stdlib.h>                  /* EXIT_SUCCESS, EXIT_FAILURE */
  53.  
  54. #include "diff.h"
  55. #include "same.h"
  56. #include "libproto.h"
  57.  
  58. /* joysticks */
  59.  
  60. #define JOYUP          1
  61. #define JOYDOWN        2
  62. #define JOYLEFT        4
  63. #define JOYRIGHT       8
  64. #define JOYFIRE1      16
  65. #define JOYFIRE2      32
  66. #define POTGOR         *(UWORD *)0xDFF016     
  67.  
  68. #define OLD            1
  69. #define NEW            0
  70.  
  71. /* #DEFINES ---------------------------------------------------------------
  72.  
  73. Help|About... window */
  74.  
  75. #define ABOUTLINES     6
  76. #define ABOUTSHADOW    DARKGREY
  77. #define ABOUTSHINE     LIGHTGREY
  78. #define PROJECTX     128
  79. #define PROJECTY      75
  80. #define KICKSTARTX   104
  81. #define KICKSTARTY    91
  82. #define WORKBENCHX   104
  83. #define WORKBENCHY    99
  84.  
  85. /* fxable/musicable */
  86.  
  87. #define FAILED         0 // tried and failed
  88. #define SUCCEEDED      1 // tried and succeeded
  89. #define UNTRIED        2 // untried, will try at startup
  90. #define DEFER          3 // untried, will try when needed
  91.  
  92. /* miscellaneous */
  93.  
  94. #define ANIMDELAY   1800
  95. #define TSOFFSET     200 // you can adjust y-positions of high scores by adjusting this
  96. #define ENTIREXPIXEL 640
  97. #define ENTIREYPIXEL 512
  98.  
  99. /* constant strings used more than once */
  100.  
  101. #define TITLEBAR       "Worm Wars 7.21a"
  102. #define PATTERN        "(#?.fset)"
  103. #define OLDKICKSTART   "Worm Wars: You need Kickstart R2.04+!\n(Can't open intuition.library V37+!)\n"
  104.  
  105. /* object descriptions (in pixels) */
  106.  
  107. #define FIRSTDESCX   130
  108. #define SECONDDESCX    (SCREENXPIXEL - FIRSTDESCX)
  109. #define DESCY          3
  110.  
  111. /* ARRAYS ---------------------------------------------------------------- */
  112.  
  113. #define CREATUREHELPS 15
  114. struct
  115. {   UBYTE  image;
  116.     STRPTR desc;
  117.     ULONG  score,
  118.            pain;
  119. } creaturehelp[CREATUREHELPS + 1] =
  120. {   {BIRD,      "Bird",      SCORE_BIRD,      PAIN_BIRD},
  121.     {CLOUD,     "Cloud",     SCORE_CLOUD,     PAIN_CLOUD},
  122.     {DOG,       "Dog",       SCORE_DOG,       PAIN_DOG},
  123.     {FIRSTDRIP, "Drip",      SCORE_DRIP,      PAIN_DRIP},
  124.     {FISH,      "Fish",      SCORE_FISH,      PAIN_FISH},
  125.     {GIRAFFE,   "Giraffe",   SCORE_GIRAFFE,   PAIN_GIRAFFE},
  126.     {GOAT,      "Goat",      SCORE_GOAT,      PAIN_GOAT},
  127.     {LION,      "Lion",      SCORE_LION,      PAIN_LION},
  128.     {ORB,       "Orb",       SCORE_ORB,       PAIN_ORB},
  129.     {OCTOPUS,   "Octopus",   SCORE_OCTOPUS,   PAIN_OCTOPUS},
  130.     {OTTER,     "Otter",     SCORE_OTTER,     PAIN_OTTER},
  131.     {PENGUIN,   "Penguin",   SCORE_PENGUIN,   PAIN_PENGUIN},
  132.     {PROTECTOR, "Protector", 0,               PAIN_PROTECTOR},
  133.     {SLIME,     "Slime",     0,               PAIN_SLIME},
  134.     {WHIRLWIND, "Whirlwind", SCORE_WHIRLWIND, PAIN_WHIRLWIND},
  135.     {LASTHEAD,  "Worm",      0,               PAIN_HEAD}
  136. };
  137.  
  138. STRPTR objectdesc[LASTOBJECT + 1] =
  139. {   "AFFIXER: Stops protectors rotating.",
  140.     "AMMO: 2-6 bullets.",
  141.     "ARMOUR: Immune to most damage.",
  142.     "BIAS: Rules changes in your favour.",
  143.     "BOMB: An explosion.",
  144.     "BONUS: Awards the next number.",
  145.     "BRAKES: Enables very slow speed.",
  146.     "CLOCK: Extra time.",
  147.     "CONVERTER: Fragments to missiles.",
  148.     "CUTTER: Cuts a tunnel through tail.",
  149.     "CYCLONE: Unleashes a whirlwind.",
  150.     "ENCLOSER: Rectangular enclosure.",
  151.     "GLOW: Leaves a glowing tail.",
  152.     "GROWER: Enlarges silver and gold.",
  153.     "HEALER: 100/200 lives.",
  154.     "ICE: Freezes enemies.",
  155.     "LIFE: 2-6 lives.",
  156.     "LIGHTNING: Flashes around tail.",
  157.     "MAGNET: Attracts all objects.",
  158.     "MISSILE: A guided missile.",
  159.     "MULTIPLIER: More points.",
  160.     "POWER: Thicker bullets.",
  161.     "PROTECTOR: An orbiting companion.",
  162.     "PULSE: Fragment explosion.",
  163.     "PUSHER: Lets you push things.",
  164.     "REMNANTS: Bullets leave a trail.",
  165.     "SIDESHOT: Shoot sideways.",
  166.     "SLAYER: Smart bomb.",
  167.     "SLOWER: Slows creatures down.",
  168.     "SWITCHER: Changes tail colours.",
  169.     "TREASURE: Treasure level.",
  170.     "UMBRELLA: Skips 2-3 levels."
  171. };
  172.  
  173. UWORD chip LogoData[8968] =
  174. {
  175.   /* Plane 0 */
  176.   15360,480,30,0,2,8,0,0,1,0,32,0,32,0,0,0,0,0,0,
  177.   53120,1660,103,49152,3588,16,0,256,2,0,16,0,35,0,1,32768,0,0,0,
  178.   3456,108,6,49152,12292,16,0,128,2,0,3,65535,65503,59392,1,32768,0,0,0,
  179.   3584,112,7,0,16384,0,0,0,0,64,1,65535,65503,63488,0,0,0,0,6,
  180.   7168,224,14,0,32768,0,0,0,0,0,0,0,64,31744,0,0,0,0,6,
  181.   3328,104,6,32769,8192,0,0,0,0,0,0,21845,21834,7680,0,0,0,0,24,
  182.   3072,96,6,2,24578,43657,0,2,43680,36864,0,0,64,3840,0,0,0,0,24,
  183.   3328,112,14,32770,32832,0,0,0,0,0,1,0,64,1920,0,0,0,0,0,
  184.   7168,224,6,4,33280,0,0,0,0,0,3,36863,65496,896,0,0,0,0,64,
  185.   3328,96,6,32772,33792,14,0,0,1,49152,1,32768,68,896,0,0,0,0,0,
  186.   3072,96,6,4,2112,1,0,0,0,8192,1,40960,9249,16832,0,0,0,0,256,
  187.   3584,96,15,8,4,16,20480,1,2,2560,1,33792,64544,448,0,0,0,0,32,
  188.   7168,224,6,8,4,16,0,0,8194,0,1,49152,16,8352,2,43666,18724,37449,8192,
  189.   3328,96,6,32776,2,8,2056,0,1,256,1,32768,0,128,0,73,9362,9362,160,
  190.   3072,96,6,0,64,0,0,0,0,0,3,40960,0,4672,2,43652,37444,34848,32768,
  191.   7424,96,14,32768,128,0,1040,1,0,144,1,32768,30720,800,0,0,0,0,160,
  192.   3072,224,6,0,256,0,8,0,0,16,1,49153,40704,336,0,0,0,0,64,
  193.   3584,96,7,0,256,0,20,0,0,24,1,32768,6912,256,0,0,0,0,128,
  194.   7168,96,6,0,512,0,0,0,0,10,3,32768,7168,464,0,0,0,0,32,
  195.   3072,96,14,32768,512,0,4,0,0,0,1,32768,14336,432,0,0,0,0,128,
  196.   3072,112,6,0,2560,0,4,0,0,0,1,32768,6656,896,0,0,0,0,64,
  197.   3072,96,6,32768,2560,0,8,0,0,0,1,32768,6144,384,0,0,0,0,128,
  198.   7168,96,14,0,2560,0,0,0,0,0,1,49152,7168,384,0,0,0,0,32,
  199.   3072,224,6,32770,512,0,0,0,0,0,1,32768,6144,448,0,0,0,0,128,
  200.   3072,96,6,2,2560,0,0,0,0,0,1,32768,14336,384,0,0,0,64,64,
  201.   3072,96,7,2,512,0,8,0,0,0,1,49152,6144,896,0,0,0,384,128,
  202.   7168,96,14,2,512,0,0,0,0,0,1,32768,6144,384,0,0,0,384,16416,
  203.   3072,224,6,32770,2560,0,8,0,0,0,3,32768,6144,384,0,0,0,0,128,
  204.   3072,96,6,2,512,0,0,0,0,0,1,32768,14336,384,0,0,0,0,64,
  205.   3072,96,7,0,512,0,0,0,0,0,1,32768,6144,896,0,0,0,0,0,
  206.   7168,96,6,2,2560,0,8,0,0,0,1,49152,6144,384,0,0,0,0,160,
  207.   3072,224,6,32768,512,0,0,0,0,0,1,32768,6144,384,0,0,0,0,16448,
  208.   3072,96,6,2,2560,0,8,0,0,0,3,32768,14336,448,0,0,0,0,128,
  209.   3072,0,15,0,2560,0,0,0,0,0,1,32768,6144,896,0,0,0,0,16416,
  210.   7168,0,6,0,512,0,0,0,0,0,1,32768,6144,384,0,0,0,0,128,
  211.   3072,0,6,32768,0,0,0,0,0,0,1,32768,6144,384,0,0,0,0,64,
  212.   3072,0,14,0,0,0,8,0,0,0,3,32768,14336,384,0,0,0,0,0,
  213.   3072,0,6,32768,0,0,0,64,0,0,1,32768,6144,896,0,0,0,0,128,
  214.   7168,0,6,0,0,0,8,0,32768,0,1,32768,6144,384,0,0,0,0,16384,
  215.   3072,0,15,0,0,0,0,64,0,0,1,32768,6144,384,0,0,0,0,128,
  216.   3072,0,12,32768,0,0,16,0,32768,0,3,32768,14336,384,0,0,0,0,0,
  217.   3072,0,16413,0,16386,10,1024,0,32768,0,1,32768,6144,896,0,0,0,0,128,
  218.   7200,0,33850,0,8196,16,16416,0,32768,0,1,32768,6144,384,0,0,0,0,0,
  219.   3136,0,33008,0,8196,16,0,0,32768,0,1,32768,6144,384,0,0,0,0,0,
  220.   3263,65535,32711,0,4096,0,112,0,32768,0,3,32768,14336,384,0,0,0,0,128,
  221.   3199,65535,32594,0,4096,0,288,0,0,0,1,32768,6144,896,0,0,0,0,0,
  222.   6144,1,262,0,2048,0,2144,0,32768,0,1,32768,6144,384,0,0,0,0,0,
  223.   170,43691,10796,0,1026,43653,21184,0,0,0,1,32768,6144,384,0,0,0,0,128,
  224.   0,1,64,0,768,0,1024,0,0,0,0,0,0,0,0,0,0,0,0,
  225.   0,1,384,0,0,0,6144,0,0,0,0,0,0,0,0,0,0,0,0,
  226.   4095,65535,32256,0,0,15,57344,0,0,0,0,0,0,0,0,0,0,0,16512,
  227.   0,1,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  228.   0,0,32768,0,4,16,0,0,0,0,0,0,0,0,0,0,0,0,16512,
  229.   0,0,32768,0,4,16,0,0,0,0,0,0,0,0,0,0,0,0,0,
  230.   0,0,16384,0,2,8,0,0,0,0,0,0,0,0,0,0,0,0,16512,
  231.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  232.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16512,
  233.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  234.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,
  235.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  236.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,
  237.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16384,
  238.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,
  239.   0,0,0,1,0,8,0,0,1,0,0,1,0,0,0,0,0,0,16384,
  240.   15360,480,30,0,0,16,0,256,2,0,0,2,0,0,0,0,0,0,128,
  241.   53120,1660,103,49152,0,16,0,128,2,0,0,98,0,320,0,0,0,0,0,
  242.   3456,108,6,49152,0,0,0,0,0,64,0,5117,65535,64736,0,0,0,0,128,
  243.   3584,112,7,0,0,0,0,0,0,0,0,18429,65535,64224,0,0,0,0,0,
  244.   7168,224,14,0,0,0,0,0,0,0,0,3588,0,480,0,0,0,0,128,
  245.   3328,104,6,32769,21845,21770,32768,2,43680,36864,1,7212,43690,44000,0,0,0,0,0,
  246.   3072,96,6,0,0,0,0,0,0,0,0,6148,0,480,0,0,0,0,128,
  247.   3328,112,14,32768,0,0,0,0,0,0,0,12292,0,992,0,0,0,0,0,
  248.   7168,224,6,0,0,14,0,0,1,49152,0,8205,65535,63712,0,0,0,0,128,
  249.   3328,96,6,32768,0,1,0,0,0,8192,0,24596,0,480,0,0,0,2,0,
  250.   3072,96,6,0,0,16,20480,1,2,2560,0,24898,0,64,0,0,0,0,128,
  251.   3584,96,15,0,0,16,0,0,8194,0,0,16386,0,128,0,0,0,6,0,
  252.   7168,224,6,0,0,8,2056,0,1,256,0,16897,0,0,0,0,0,6,0,
  253.   3328,96,6,32768,0,0,128,0,0,0,0,20480,0,0,0,0,0,0,16536,
  254.   3072,96,6,0,0,0,1160,1,0,144,0,17408,0,0,0,0,0,0,24,
  255.   7424,96,14,32768,0,0,128,0,0,16,5,16384,0,0,0,0,0,6,16512,
  256.   3072,224,6,0,0,0,12,0,0,24,7,49152,0,0,0,0,0,6,8,
  257.   3584,96,7,0,0,0,0,0,0,10,12,24576,0,0,0,0,0,0,152,
  258.   7168,96,6,0,0,0,4,0,0,0,4,24576,0,0,0,0,0,0,16408,
  259.   3072,96,14,32768,0,0,4,0,0,0,4,12288,0,0,0,0,0,0,24,
  260.   3072,112,6,0,0,0,8,0,0,0,12,12288,0,0,0,0,0,0,152,
  261.   3072,96,6,32768,0,0,0,0,0,0,4,14336,0,0,0,0,0,0,24,
  262.   7168,96,14,0,68,0,512,0,0,0,2,7169,4,16384,0,0,0,0,152,
  263.   3072,224,6,32768,8,0,0,0,0,0,0,3842,9,36864,0,0,0,0,24,
  264.   3072,96,6,0,4096,0,520,0,0,0,0,2041,65511,62464,0,0,0,0,16408,
  265.   3072,96,7,0,8192,0,1024,0,0,0,0,1021,65527,64512,0,0,0,0,152,
  266.   7168,96,14,0,16384,0,1024,0,0,0,0,4,20,7808,0,0,0,0,16408,
  267.   3072,224,6,32768,33280,0,1024,0,0,0,0,4,34960,8064,0,0,0,0,128,
  268.   3072,96,6,0,1024,8,1032,0,0,0,0,0,0,1408,0,0,0,0,8,
  269.   3072,96,7,1,2056,32,512,0,0,0,0,2,8,1728,0,0,0,0,152,
  270.   7168,96,6,0,4100,16,0,0,0,0,0,1,4,2752,0,0,0,0,24,
  271.   3072,224,6,32770,0,0,0,0,0,0,0,0,0,864,0,0,0,0,16384,
  272.   3072,96,6,0,0,0,8,0,0,0,0,0,0,864,0,0,0,0,128,
  273.   3072,0,15,0,0,0,0,0,0,0,0,0,0,864,0,0,0,0,16384,
  274.   7168,0,6,0,0,0,8,0,0,0,0,0,0,816,0,0,0,0,128,
  275.   3072,0,6,32768,0,0,0,0,0,0,0,0,0,880,0,0,0,0,0,
  276.   3072,0,14,0,0,0,0,64,0,0,0,0,0,816,0,0,0,0,0,
  277.   3072,0,6,32768,0,0,0,0,32768,0,0,0,0,848,0,0,0,0,0,
  278.   7168,0,6,0,0,0,8,64,0,0,0,0,0,784,0,0,0,0,0,
  279.   3072,0,15,0,0,0,16,0,32768,0,0,0,0,688,0,0,0,0,0,
  280.   3072,0,12,32768,4,10,0,0,32768,0,2,0,8,3600,0,0,0,0,0,
  281.   3072,0,16413,0,8,16,32,0,32768,0,4,0,16,3328,0,0,0,0,0,
  282.   7200,0,33850,0,8,16,0,0,32768,0,4,0,16,6160,0,0,0,0,0,
  283.   3136,0,33008,0,8192,0,112,0,32768,0,15,65535,65519,61952,0,0,0,0,0,
  284.   3263,65535,32711,0,8192,0,288,0,0,0,15,65535,65519,53248,0,0,0,0,0,
  285.   3199,65535,32594,0,4096,0,2144,0,32768,0,8,0,32,17408,0,0,0,0,0,
  286.   6144,1,262,2,2053,21770,41664,0,0,0,10,43690,43685,2048,0,0,0,0,0,
  287.   170,43691,10796,0,1536,0,1024,0,0,0,8,0,32,8192,0,0,0,0,0,
  288.   0,1,64,0,0,0,6144,0,0,0,8,0,35,16384,0,0,0,0,0,
  289.   0,1,384,0,0,15,57344,0,0,0,15,65535,65516,0,0,0,0,0,0,
  290.   4095,65535,32256,0,192,0,0,0,0,0,0,0,33,0,0,0,0,0,0,
  291.   0,1,0,0,8,16,0,0,0,0,0,0,16,0,0,0,0,0,0,
  292.   0,0,32768,0,8,16,0,0,0,0,0,0,16,0,0,0,0,0,0,
  293.   0,0,32768,0,4,8,0,0,0,0,0,0,8,0,0,0,0,0,0,
  294.   /* Plane 1 */
  295.   15360,480,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  296.   3968,124,7,49152,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,
  297.   3456,108,6,49152,0,0,49152,0,0,6144,3,65535,65503,59392,0,0,0,0,0,
  298.   3584,112,7,0,1979,65519,64000,31,65533,65280,1,65535,65503,63488,6,0,0,0,0,
  299.   7168,224,14,0,7419,65519,65024,15,65533,65408,0,0,64,31744,6,0,0,0,0,
  300.   3072,96,6,0,1000,34,7936,0,4,17344,0,0,64,7680,6,0,0,0,0,
  301.   3072,96,6,0,3864,32,1920,0,4,240,0,0,64,3840,6,0,0,0,0,
  302.   3072,112,14,0,3336,32,960,0,4,112,1,0,64,1920,31,65535,65535,65535,65024,
  303.   7168,224,6,0,6152,32,480,8,4,56,3,36863,65472,896,31,65535,65535,65535,65024,
  304.   3072,96,6,0,12299,65504,224,28,32764,28,1,32768,64,896,31,65535,65535,65535,63488,
  305.   3072,96,6,0,24584,32,224,12,4,28,1,32768,0,448,31,65535,65535,65535,63488,
  306.   3584,96,15,0,24576,0,112,12,0,14,1,32768,0,448,24,0,0,0,0,
  307.   7168,224,6,0,24576,0,112,12,0,14,1,49152,0,128,24,0,0,0,0,
  308.   3072,96,6,0,49152,0,32,14,0,4,1,32768,0,128,24,0,0,0,0,
  309.   3072,96,6,0,49152,0,32,12,0,4,3,32768,0,512,24,0,0,0,0,
  310.   7168,96,14,0,49152,0,128,28,0,4,1,32768,30720,768,24,0,0,0,1536,
  311.   3072,224,6,0,49152,0,192,12,0,4,1,49152,7936,256,24,0,0,0,1536,
  312.   3584,96,7,0,49152,0,64,14,0,0,1,32768,6912,256,24,0,0,0,7680,
  313.   7168,96,6,0,49152,0,64,12,0,0,3,32768,7168,448,24,0,0,0,7680,
  314.   3072,96,14,0,49152,0,112,28,0,0,1,32768,14336,384,31,65535,65535,65504,7680,
  315.   3072,112,6,0,49152,0,96,12,0,0,1,32768,6144,896,31,65535,65535,65504,15872,
  316.   3072,96,6,0,49152,0,224,12,0,0,1,32768,6144,384,0,0,0,0,7680,
  317.   7168,96,14,0,49152,0,96,12,0,0,1,49152,7168,384,0,0,0,0,15872,
  318.   3072,224,6,0,49152,0,112,14,0,0,1,32768,6144,448,0,0,0,0,7680,
  319.   3072,96,6,0,49152,0,224,12,0,0,1,32768,14336,384,0,0,0,0,15872,
  320.   3072,96,7,0,57344,0,96,12,0,0,1,49152,6144,896,0,0,0,0,7680,
  321.   7168,96,14,0,49152,0,96,14,0,0,1,32768,6144,384,0,0,0,0,7680,
  322.   3072,224,6,0,49152,0,96,12,0,0,3,32768,6144,384,0,0,0,0,15872,
  323.   3072,96,6,0,49152,0,96,28,0,0,1,32768,14336,384,0,0,0,0,7680,
  324.   3072,96,7,0,49152,0,112,12,0,0,1,32768,6144,896,0,0,0,0,15872,
  325.   7168,96,6,0,49152,0,96,12,0,0,1,49152,6144,384,0,0,0,0,7680,
  326.   3072,224,6,0,49152,0,96,14,0,0,1,32768,6144,384,0,0,0,0,7680,
  327.   3072,96,6,0,49152,0,224,12,0,0,3,32768,14336,448,0,0,0,0,7680,
  328.   3072,0,15,0,49152,0,96,12,0,0,1,32768,6144,896,0,0,0,0,7680,
  329.   7168,0,6,0,49152,0,112,28,0,0,1,32768,6144,384,0,0,0,0,15872,
  330.   3072,0,6,0,49152,0,96,12,0,0,1,32768,6144,384,0,0,0,0,7680,
  331.   3072,0,14,0,16384,0,224,12,0,0,3,32768,14336,384,0,0,0,0,15872,
  332.   3072,0,6,0,16384,0,96,12,0,0,1,32768,6144,896,0,0,0,0,7680,
  333.   7168,0,6,0,28672,0,96,14,0,0,1,32768,6144,384,0,0,0,0,7680,
  334.   3072,0,15,0,8192,0,224,28,0,0,1,32768,6144,384,0,0,0,0,7680,
  335.   3072,0,12,0,12288,0,192,12,0,0,3,32768,14336,384,0,0,0,0,15872,
  336.   3072,0,28,0,6144,0,448,12,0,0,1,32768,6144,896,0,0,0,0,7680,
  337.   7168,0,56,0,3072,0,896,14,0,0,1,32768,6144,384,0,0,0,0,15872,
  338.   3072,0,240,0,1536,0,12032,28,0,0,1,32768,6144,384,0,0,0,0,7680,
  339.   3135,65535,32704,0,1019,65519,64512,12,0,0,3,32768,14336,384,0,0,0,0,15872,
  340.   3199,65535,32576,0,507,65519,61440,12,0,0,1,32768,6144,896,0,0,0,0,7680,
  341.   6144,1,256,0,8,32,0,12,0,0,1,32768,6144,384,0,0,0,0,15872,
  342.   0,3,0,0,24,32,0,14,0,0,1,32768,6144,384,0,0,0,0,7680,
  343.   0,1,0,0,8,32,0,12,0,0,0,0,0,0,0,0,0,0,15872,
  344.   0,1,0,0,248,32,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  345.   4095,65535,0,0,11,65504,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  346.   0,1,0,0,8,32,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  347.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  348.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  349.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  350.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  351.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  352.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15872,
  353.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  354.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15872,
  355.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  356.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  357.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  358.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  359.   15360,480,30,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7680,
  360.   3968,124,7,49154,0,0,49152,0,0,6144,0,96,0,64,0,0,0,0,15872,
  361.   3456,108,6,49159,65535,65519,64000,31,65533,65280,0,1021,65535,64736,0,0,0,0,7680,
  362.   3584,112,7,7,65535,65519,65024,15,65533,65408,0,2045,65535,63712,0,0,0,0,15872,
  363.   7168,224,14,4,0,32,7936,0,4,17344,0,3588,0,480,0,0,0,0,7680,
  364.   3072,96,6,4,0,32,1920,0,4,240,0,7180,0,992,0,0,0,0,15872,
  365.   3072,96,6,4,0,32,960,0,4,112,0,6148,0,480,0,0,0,0,7680,
  366.   3072,112,14,4,0,32,480,8,4,56,0,12292,0,992,0,0,0,0,15872,
  367.   7168,224,6,7,65535,65504,224,28,32764,28,0,8204,0,224,0,0,0,0,7680,
  368.   3072,96,6,0,0,32,224,12,4,28,0,24580,0,480,0,0,0,0,15872,
  369.   3072,96,6,0,0,0,112,12,0,14,0,24576,0,64,0,0,0,0,7680,
  370.   3584,96,15,0,0,0,112,12,0,14,0,16384,0,0,0,0,0,0,15872,
  371.   7168,224,6,0,0,0,32,14,0,4,0,16384,0,0,0,0,0,0,7680,
  372.   3072,96,6,0,0,0,32,12,0,4,0,16384,0,0,0,0,0,0,7680,
  373.   3072,96,6,0,0,0,32,28,0,4,0,16384,0,0,0,0,0,0,7680,
  374.   7168,96,14,0,0,0,0,12,0,4,5,16384,0,0,0,0,0,0,7680,
  375.   3072,224,6,0,0,0,96,14,0,0,7,49152,0,0,0,0,0,0,15872,
  376.   3584,96,7,0,0,0,192,12,0,0,12,24576,0,0,0,0,0,0,7680,
  377.   7168,96,6,0,0,0,112,28,0,0,4,24576,0,0,0,0,0,0,7680,
  378.   3072,96,14,0,0,0,96,12,0,0,4,12288,0,0,0,0,0,0,7680,
  379.   3072,112,6,0,0,0,96,12,0,0,12,12288,0,0,0,0,0,0,15872,
  380.   3072,96,6,0,0,0,96,12,0,0,4,14336,0,0,0,0,0,0,7680,
  381.   7168,96,14,0,0,16,112,28,0,0,0,7168,0,0,0,0,0,0,15872,
  382.   3072,224,6,0,0,56,224,12,0,0,0,3840,1,36864,0,0,0,0,7680,
  383.   3072,96,6,0,231,65400,96,12,0,0,0,2041,65511,62464,0,0,0,0,7680,
  384.   3072,96,7,0,247,65404,96,12,0,0,0,1021,65527,64512,0,0,0,0,7680,
  385.   7168,96,14,0,144,248,112,28,0,0,0,4,20,7808,0,0,0,0,7680,
  386.   3072,224,6,0,16,112,96,12,0,0,0,4,16,8064,0,0,0,0,15872,
  387.   3072,96,6,0,0,64,96,12,0,0,0,0,0,1408,0,0,0,0,7680,
  388.   3072,96,7,0,0,0,96,28,0,0,0,0,0,1728,0,0,0,0,15872,
  389.   7168,96,6,0,0,0,240,12,0,0,0,0,0,704,0,0,0,0,7680,
  390.   3072,224,6,0,8192,0,96,12,0,0,0,0,0,864,0,0,0,0,7680,
  391.   3072,96,6,0,8192,0,96,28,0,0,0,0,0,864,0,0,0,0,7680,
  392.   3072,0,15,4,24576,0,96,12,0,0,0,0,0,864,0,0,0,0,7680,
  393.   7168,0,6,4,24576,0,224,12,0,0,0,0,0,816,0,0,0,0,7680,
  394.   3072,0,6,4,24576,0,96,14,0,0,0,0,0,880,0,0,0,0,0,
  395.   3072,0,14,4,24576,0,112,28,0,0,0,0,0,816,0,0,0,0,0,
  396.   3072,0,6,5,24576,0,96,12,0,0,0,0,0,784,0,0,0,0,0,
  397.   7168,0,6,7,57344,0,224,12,0,0,0,0,0,784,0,0,0,0,0,
  398.   3072,0,15,7,40960,0,192,28,0,0,0,0,0,560,0,0,0,0,0,
  399.   3072,0,12,6,61440,0,448,12,0,0,0,0,0,3600,0,0,0,0,0,
  400.   3072,0,28,4,22528,0,1920,12,0,0,4,0,0,3072,0,0,0,0,0,
  401.   7168,0,56,0,19584,0,7936,12,0,0,4,0,0,6144,0,0,0,0,0,
  402.   3072,0,240,0,2039,65519,64512,28,0,0,15,65535,65519,61440,0,0,0,0,0,
  403.   3135,65535,32704,0,1015,65519,61440,12,0,0,15,65535,65519,53248,0,0,0,0,0,
  404.   3199,65535,32576,0,16,32,0,12,0,0,8,0,32,16384,0,0,0,0,0,
  405.   6144,1,256,0,48,96,0,12,0,0,8,0,32,0,0,0,0,0,0,
  406.   0,3,0,0,16,32,0,12,0,0,8,0,32,0,0,0,0,0,0,
  407.   0,1,0,0,496,32,0,0,0,0,8,0,32,0,0,0,0,0,0,
  408.   0,1,0,0,23,65504,0,0,0,0,15,65535,65504,0,0,0,0,0,0,
  409.   4095,65535,0,0,16,32,0,0,0,0,0,0,32,0,0,0,0,0,0,
  410.   0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  411.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  412.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  413.   /* Plane 2 */
  414.   32640,1020,63,49152,2044,65523,63488,511,65534,32512,31,65535,65487,30720,0,0,0,0,0,
  415.   8064,2300,143,49152,12793,65511,54784,255,65532,64192,39,65535,65484,58880,0,32767,65535,65535,65534,
  416.   8128,2302,143,57344,4091,65511,14720,319,65532,65328,12,0,32,4864,4,32767,65535,65535,65534,
  417.   16320,5630,159,57344,47108,16,1216,127,65535,65432,20,0,32,1792,7,65535,65535,65535,65528,
  418.   24384,250,47,40961,24836,16,448,175,65535,65528,10,65535,65471,33728,23,65535,65535,65535,65528,
  419.   40512,2802,79,8194,56343,65501,57584,87,65535,65534,33,10922,43701,57792,31,65535,65535,65535,65446,
  420.   16320,254,15,57345,32997,21846,63600,265,21855,28670,10,32768,39,61680,31,65535,65535,65535,65414,
  421.   7744,5626,175,8197,21156,16403,64572,84,23,16383,32774,18724,35121,30768,31,65535,65535,65535,65142,
  422.   24384,4350,15,40971,26021,5268,24076,58,18702,6143,32800,8192,36,48240,31,65535,65535,65535,65062,
  423.   40512,5370,95,8203,19380,17,44828,285,32766,9215,32778,22528,35,15480,31,65535,65535,65535,63958,
  424.   16320,6650,15,57355,6068,18,38686,94,49158,23039,49170,19613,56218,3600,31,65535,65535,65535,63622,
  425.   8000,4346,175,40967,40419,21128,34692,158,25761,4222,32774,31271,916,63016,31,65535,65535,65535,58958,
  426.   24512,6906,15,57350,40226,2089,15754,63,53525,17343,16422,10373,65487,24392,29,21869,46811,28086,50934,
  427.   40512,4346,95,8193,14985,41604,54738,319,17472,37119,16394,30720,14,46968,31,65462,56173,56173,55622,
  428.   24384,6650,47,40964,15792,7,12254,95,49152,58879,16400,18432,1,19880,29,21883,28091,30687,7158,
  429.   7744,4346,143,8192,15616,0,20842,158,16384,2607,16386,26624,34560,46280,25,4144,16,21390,28486,
  430.   24512,6906,15,57354,14848,0,12082,31,16384,1262,16426,14338,8192,16040,24,17733,19082,1056,26534,
  431.   8000,4346,95,40960,14848,0,3242,351,49152,295,16390,18434,9408,21224,26,8208,8257,20617,40822,
  432.   24128,5626,15,57349,14592,0,4542,62,16384,149,16400,26626,25472,20008,25,2698,35368,1059,57286,
  433.   8000,4346,175,8194,15360,0,6538,159,16384,297,16386,26625,1920,22088,31,65535,65535,65518,32630,
  434.   48960,6642,15,40968,13568,0,410,31,16384,669,49194,26628,9344,25704,31,65535,65535,65510,65446,
  435.   8000,4858,79,8193,12288,0,1298,351,16384,382,16390,26625,26496,19048,24,0,0,25,32630,
  436.   24384,6650,47,57348,13312,0,670,63,16384,511,18,2052,8320,25192,25,9288,35108,42268,65478,
  437.   8000,4346,79,8192,15360,0,2186,158,16384,24,6,18437,25728,17928,6,35090,8322,4592,32630,
  438.   48960,6394,31,40968,13312,0,542,62,16384,133,38,26628,1664,26216,14,8772,35368,34218,65454,
  439.   8000,4858,143,57344,7168,0,146,319,16384,0,10,14342,9856,16488,6,34832,8322,9824,32630,
  440.   24384,6650,47,57348,15360,0,2718,95,49152,0,6,26628,42624,27240,6,8837,2600,34405,16326,
  441.   8000,4346,79,8192,13312,0,402,63,16384,0,32,26630,26240,17000,1,51280,41090,8768,32622,
  442.   48960,6394,31,40968,15360,0,1182,287,16384,0,10,18436,1664,22104,5,33284,2596,37013,32694,
  443.   8000,762,79,57345,15360,0,394,94,16384,0,18,26630,9856,16488,0,0,0,0,65526,
  444.   24384,4602,31,40964,13312,0,2450,159,16384,0,6,2052,42624,25192,0,0,0,84,32582,
  445.   8000,1274,175,8192,15360,0,670,62,16384,0,38,22534,26240,19048,0,0,0,1,16294,
  446.   48960,2298,31,57352,13312,0,1042,350,49152,0,0,26628,1664,26120,0,0,0,36,32630,
  447.   8000,666,79,40962,13312,0,158,63,16384,0,18,26630,42624,16472,0,0,0,17,16326,
  448.   24384,5322,271,57349,15360,0,4746,223,16384,0,10,26628,9856,27240,0,0,0,68,32622,
  449.   8000,3060,335,8193,15104,0,7582,95,16384,0,38,26629,26240,16968,0,0,0,17,32694,
  450.   48960,4090,367,40971,48896,0,5138,223,49152,0,0,26628,1664,22120,0,0,0,4,65526,
  451.   8000,232,207,8193,49024,0,3226,63,16384,0,18,26630,9856,16488,0,0,0,80,32550,
  452.   24384,1032,639,57351,3456,0,8850,351,16384,0,10,26628,42624,25192,0,0,0,5,16326,
  453.   8000,8,431,40962,24512,0,4894,31,49152,0,38,26630,26240,19048,0,0,0,32,32534,
  454.   48960,0,3935,8204,53104,0,63278,159,16384,0,0,26628,1664,26216,0,0,0,20,65478,
  455.   8031,62619,40958,40964,42924,65521,64058,63,16384,0,18,26630,9856,16488,0,0,0,66,32534,
  456.   24335,63783,15357,40967,37881,65511,48218,287,16384,0,10,26628,42624,25192,0,0,0,16,65478,
  457.   7967,65535,16383,24585,23033,65511,53490,95,16384,0,38,26629,26240,19048,0,0,0,4,65486,
  458.   48959,65535,65528,16399,11268,16,900,159,16384,0,0,26628,1664,26216,0,0,0,81,32518,
  459.   8063,65535,65517,57346,59908,16,3798,63,49152,0,18,26630,9856,16488,0,0,0,4,65494,
  460.   23551,65535,65528,40965,41975,65503,63370,159,16384,0,6,26628,42624,27240,0,0,0,32,32710,
  461.   5461,21847,54721,16385,50149,21850,44052,63,16384,0,34,26624,26240,616,0,0,0,21,32526,
  462.   41489,1,37045,0,43140,1104,2896,351,16384,0,10,47106,10880,9576,0,0,0,64,65478,
  463.   2180,18773,34378,32769,25860,41242,58536,41,49152,0,19,31749,13952,21288,0,0,0,20,65494,
  464.   53247,65535,33205,0,45652,16,6480,155,49152,0,47,57350,64512,12232,0,0,0,0,16134,
  465.   57344,1,49918,0,22662,16,4000,382,0,0,31,59395,65024,16352,0,0,0,85,32758,
  466.   51882,38024,21856,0,10179,10893,22272,255,0,0,7,4096,12288,768,0,0,0,0,16230,
  467.   32768,16930,18256,0,6642,44,28928,28,0,0,16,24577,17920,4448,0,0,0,37,32742,
  468.   32768,136,45184,0,1793,43654,18432,129,0,0,0,0,0,0,0,0,0,16,16246,
  469.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,32758,
  470.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16230,
  471.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,32750,
  472.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,32614,
  473.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,65414,
  474.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,32558,
  475.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,16326,
  476.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,32534,
  477.   0,0,0,0,65535,65523,63488,511,65534,32512,0,510,32767,65472,0,0,0,18,16326,
  478.   17280,540,33,49155,65535,65519,54784,255,65532,64192,0,4093,65535,65504,0,0,0,4,32526,
  479.   4096,2176,136,7,65535,65511,63872,319,65532,59184,0,8188,65535,65264,0,0,0,86,65478,
  480.   4672,2194,137,8199,65535,65535,65216,96,2,152,0,9215,65535,65504,0,0,0,14,32534,
  481.   12736,5518,152,57351,65535,65535,65472,160,2,120,0,14335,65535,65008,0,0,0,32,65478,
  482.   17216,26,33,40967,65535,65535,65520,87,65531,48190,0,61439,65535,65520,0,0,0,9,32526,
  483.   37440,2706,73,8198,43690,43765,32752,265,21851,28430,0,65503,21845,22520,0,0,0,70,65446,
  484.   13248,158,9,57348,8192,177,65532,84,19,16271,32771,40950,256,2032,0,0,0,22,32518,
  485.   4672,5514,161,8197,2633,8820,24556,50,18698,6087,32770,65478,37961,12280,0,0,0,36,65454,
  486.   17216,4126,9,40967,65535,65521,45052,257,2,9187,32775,15902,0,2032,0,0,0,8,65286,
  487.   37440,5274,89,8196,8192,50,38910,82,49154,23011,49157,65198,0,2032,0,0,0,68,32702,
  488.   13248,6554,9,57346,35156,38028,34804,146,25761,4208,32783,64553,42154,38896,0,0,0,23,32542,
  489.   4416,4250,160,40962,8705,8712,6650,51,53525,17329,16399,62209,2304,9056,0,0,0,40,65510,
  490.   17344,6682,9,57347,34964,18598,34290,305,17472,37115,16398,64628,49738,35264,0,0,0,0,32758,
  491.   37440,4250,89,8192,0,7,11646,83,49152,58875,16399,58936,0,0,0,0,0,87,16230,
  492.   21312,6554,41,40960,0,0,21362,130,16384,2603,16399,61760,0,0,0,0,0,6,32742,
  493.   576,4250,129,8192,0,0,10106,19,16384,1258,16399,63104,0,0,0,0,0,40,16254,
  494.   21440,6682,9,57344,0,0,2546,337,49152,295,16399,60800,0,0,0,0,0,0,32758,
  495.   4416,4250,88,40960,0,0,4858,50,16384,149,16398,64640,0,0,0,0,0,80,65382,
  496.   16960,5530,9,57344,0,0,4346,131,16384,297,16397,61056,0,0,0,0,0,4,16358,
  497.   4928,4250,161,8192,0,0,2810,19,16384,669,49166,32448,0,0,0,0,0,34,32742,
  498.   45888,6530,9,40960,0,0,498,179,16384,382,16398,63408,0,0,0,0,0,16,65382,
  499.   4928,4762,73,8192,34,8720,1278,19,16384,511,14,31708,8737,0,0,0,0,68,65510,
  500.   17216,6554,33,57344,953,65532,506,323,16384,24,12,15870,65531,40960,0,0,0,17,32614,
  501.   4928,4122,73,8192,3891,65532,1790,19,16384,133,3,24444,65523,63488,0,0,0,36,32742,
  502.   45888,6298,25,40960,11007,65534,1266,179,16384,0,7,49151,65535,65024,0,0,0,1,16358,
  503.   4928,4762,136,57344,17151,65534,1022,19,16384,0,0,51199,65535,65408,0,0,0,84,32614,
  504.   17216,6554,33,57344,33791,65534,1023,323,16384,0,2,61446,31,65408,0,0,0,1,16358,
  505.   4928,4122,73,8193,5426,43774,3070,19,16384,0,1,8575,30583,32704,0,0,0,40,32638,
  506.   45888,6298,25,40963,43800,17652,1010,147,16384,0,0,36758,63032,65504,0,0,0,2,65526,
  507.   4928,666,72,57346,38690,8668,1278,67,16384,0,0,1513,23186,32736,0,0,0,80,32614,
  508.   17216,4506,25,40967,9281,5160,762,147,16384,0,0,6660,8193,6128,0,0,0,10,65510,
  509.   4928,1050,169,8196,30879,65520,254,83,16384,0,0,1023,65532,53232,0,0,0,32,16374,
  510.   45888,2202,25,57351,31712,0,2546,259,16384,0,0,0,6,61424,0,0,0,9,32614,
  511.   4928,666,64,40964,26048,0,4858,82,16384,0,0,0,1,29680,0,0,0,68,16366,
  512.   17216,5322,265,57348,25472,0,6386,19,16384,0,0,0,0,58352,0,0,0,17,32614,
  513.   4928,3060,329,8199,25472,0,4350,240,49152,0,0,0,0,47088,0,0,0,68,24678,
  514.   45888,4090,353,40966,64256,0,2810,3,16384,0,0,0,0,14320,0,0,0,17,2798,
  515.   4928,232,201,8199,63232,0,8702,339,16384,0,0,0,0,30640,0,0,0,56,30822,
  516.   17216,1032,633,57351,62848,0,7154,19,49152,0,0,0,0,22512,0,0,0,26,32102,
  517.   4928,8,416,40967,63872,1,63466,131,16384,0,0,0,0,55152,0,0,0,103,65416,
  518.   45888,0,3923,8199,65017,65521,65530,19,16384,0,1,65535,65523,57328,0,0,0,103,65424,
  519.   4959,62619,40930,40967,32307,65511,65498,179,16384,0,7,65535,65510,15920,0,0,0,95,65508,
  520.   17167,63783,15301,40966,57331,65511,65526,19,24576,0,15,65535,65511,65440,0,0,0,31,65506,
  521.   4895,65535,16143,24582,24575,65535,65412,323,16384,0,15,65535,65535,64848,0,0,0,36,31016,
  522.   45824,0,32824,16391,24575,65535,65246,19,49152,0,15,65535,65535,63344,0,0,0,17,30848,
  523.   4864,0,32941,57346,2047,65535,63368,179,16384,0,15,65535,65535,57456,0,0,0,24,33376,
  524.   17407,65534,65272,40960,38906,43765,23572,19,16384,0,13,21845,21882,61920,0,0,0,26,9312,
  525.   5461,21844,54721,16385,12568,34865,7024,179,16384,0,8,17476,17528,56544,0,0,0,0,0,
  526.   41489,0,37045,1,57338,8882,25768,43,49152,0,10,4369,4400,47424,0,0,0,0,0,
  527.   2180,18772,34378,32768,58431,65520,6480,473,16384,0,15,65535,65522,4800,0,0,0,0,0,
  528.   49152,0,33205,0,61720,56,7072,510,0,0,8,0,48,50432,0,0,0,0,0,
  529.   57344,0,49918,0,13189,18733,24192,511,0,0,6,43594,19020,58880,0,0,0,0,0,
  530.   51882,38024,21856,0,3924,4616,30976,56,32768,0,4,272,37002,15360,0,0,0,0,0,
  531.   32768,16930,18256,0,962,16518,18432,131,0,0,2,21572,1045,57344,0,0,0,0,0,
  532.   /* Plane 3 */
  533.   640,20,1,16384,1704,21841,22528,170,43690,11008,21,21845,21834,24576,0,0,0,0,0,
  534.   0,0,0,0,8201,21826,32768,170,43688,20480,5,43690,43651,512,0,10922,43690,43690,43690,
  535.   0,0,0,0,523,27300,49280,45,21844,32784,7,65535,65535,59648,4,21845,21845,21845,21844,
  536.   8320,5380,144,16384,4031,65535,64064,32,2,8,17,65535,65535,64000,7,23210,43690,43690,43688,
  537.   16448,2,32,8192,23803,65535,65152,128,2,16,8,0,64,64832,22,43885,46811,28086,56168,
  538.   32768,2560,64,0,35820,34,16208,64,0,1034,32,0,96,24192,23,27990,43690,43690,43684,
  539.   8384,6,0,24576,3868,48,6048,256,0,516,8,0,66,8048,15,43690,44373,21845,21764,
  540.   0,1280,160,0,3372,16419,2012,64,19,4227,32773,2340,35185,6032,31,65535,65535,65535,65042,
  541.   16448,4102,0,8200,22697,5300,17892,32,18698,5442,32803,36863,65504,43952,31,65535,65535,65535,65028,
  542.   32768,1032,80,8,12719,65505,43756,256,0,833,32777,38912,65,14248,31,65535,65535,65535,63570,
  543.   8384,6410,0,24576,25528,48,5610,64,49154,2433,16401,32920,920,448,31,65535,65535,65535,63492,
  544.   0,8,160,1,24803,21120,1136,128,1184,0,5,38944,4,21440,24,0,0,0,1036,
  545.   16576,6666,0,24576,25600,2088,5360,32,49429,16544,37,49280,43982,22656,24,0,0,0,658,
  546.   32768,8,80,1,49161,41600,21536,288,1088,192,9,38912,6,32912,24,0,0,0,20484,
  547.   64,6410,0,8196,52528,5,548,64,49152,42048,19,32768,0,2560,24,0,0,0,2578,
  548.   0,8,128,0,51200,0,4224,128,0,512,1,34816,32000,34560,25,4144,16,21390,11780,
  549.   16576,6666,0,24586,51200,0,960,0,16384,96,41,53248,7936,9472,24,17733,19082,1056,17922,
  550.   0,8,80,0,49664,0,2112,320,32768,289,5,34816,6976,264,26,8208,8257,20616,7700,
  551.   16448,5386,0,24581,51456,0,326,32,16384,129,19,40962,23936,16832,25,2698,35368,1059,56834,
  552.   256,8,160,0,50176,0,6258,129,0,296,16385,43009,14592,4488,31,65535,65535,65516,7700,
  553.   41280,6402,0,8200,50432,0,96,1,16384,13,49193,40964,6272,26496,31,65535,65535,65506,48642,
  554.   256,512,64,1,49152,0,1506,321,0,308,16389,43009,22912,2472,16,0,0,9,7700,
  555.   16704,6402,32,24580,50176,0,612,33,16384,426,17,49152,7168,24992,9,9288,35108,42252,48642,
  556.   256,0,64,0,53248,0,2162,128,0,8,5,32773,22528,1480,2,35090,8322,4368,7700,
  557.   41280,6146,16,8200,50176,0,740,32,0,4,37,34816,14976,25984,12,8772,35368,33930,48652,
  558.   0,512,128,16384,61440,0,98,288,16384,0,9,63494,6656,904,2,34832,8322,8768,7698,
  559.   16448,6402,32,24580,49152,0,2662,65,49152,0,5,32768,39040,27008,4,8837,2600,33349,7684,
  560.   0,0,64,0,50176,0,352,32,0,0,35,34822,22528,392,0,51280,41090,8768,15884,
  561.   41024,6146,16,8200,49152,0,1126,256,16384,0,9,32768,14976,21912,5,516,2596,37013,7698,
  562.   256,512,64,16385,50176,0,368,64,0,0,17,43014,6656,928,0,0,0,0,48660,
  563.   16704,258,16,8196,49152,0,2402,129,16384,0,5,49152,39552,25000,0,0,0,84,7682,
  564.   256,1024,160,0,50176,0,614,32,0,0,37,38918,23040,2464,0,0,0,1,7684,
  565.   41280,2050,16,24584,50176,0,1248,256,49152,0,3,40960,14976,26056,0,0,0,36,7698,
  566.   256,664,64,2,50176,0,102,33,0,0,17,43014,39424,920,0,0,0,17,7684,
  567.   16704,130,0,24580,50176,0,624,193,16384,0,9,40960,6784,27040,0,0,0,68,15884,
  568.   256,2388,256,1,51200,0,7526,65,0,0,37,43013,23040,392,0,0,0,17,7698,
  569.   41280,3434,96,8203,19456,0,224,129,49152,0,3,32768,14464,21888,0,0,0,4,48660,
  570.   0,104,64,0,50688,0,2146,32,0,0,17,34822,6144,904,0,0,0,80,7714,
  571.   16448,8,112,24582,30720,0,96,257,16384,0,9,32768,39040,24960,0,0,0,5,7746,
  572.   0,8,384,0,8960,0,998,0,0,0,37,34822,22528,2440,0,0,0,32,7700,
  573.   41024,0,0,8204,29248,0,710,128,16384,0,3,32768,14464,25984,0,0,0,20,48706,
  574.   10,45209,1280,32768,47400,21840,23488,33,0,0,17,34822,6144,904,0,0,0,66,7700,
  575.   16394,43010,4608,40965,36009,27298,9090,257,16384,0,9,32768,39040,24960,0,0,0,16,48706,
  576.   11,21867,10240,16384,5648,44450,61184,64,16384,0,37,34821,22528,2440,0,0,0,4,40524,
  577.   41216,0,32768,16398,11263,65519,64512,129,0,0,3,32768,14464,25984,0,0,0,81,15874,
  578.   512,0,5,49152,57855,65535,61524,32,0,0,17,34822,6144,904,0,0,0,4,40532,
  579.   17152,0,32776,8192,41480,32,2,128,16384,0,5,32768,39040,27008,0,0,0,32,15938,
  580.   0,0,0,1,49948,48,0,33,0,0,33,34816,22528,392,0,0,0,21,7692,
  581.   41489,0,36913,0,8332,1120,2896,320,16384,0,10,47106,10880,9568,0,0,0,64,48706,
  582.   2180,18772,576,0,16888,41274,49152,41,49152,0,1,31748,5120,264,0,0,0,20,40532,
  583.   49152,0,32821,0,8271,65520,272,11,32768,0,5,24582,21504,9864,0,0,0,0,7682,
  584.   57344,0,49900,0,4110,32,3712,84,0,0,22,43011,21504,13632,0,0,0,85,7732,
  585.   51882,38024,64,0,1411,10892,768,86,0,0,6,4096,8192,256,0,0,0,0,7746,
  586.   32768,16930,17728,0,4528,44,20480,12,0,0,0,24576,17920,352,0,0,0,37,7714,
  587.   0,136,45056,0,513,43654,16384,0,0,0,0,0,0,0,0,0,0,16,7796,
  588.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,7730,
  589.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,7748,
  590.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,15916,
  591.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,7746,
  592.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,48644,
  593.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7724,
  594.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,7746,
  595.   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,7700,
  596.   0,0,0,0,21845,21841,22528,170,43690,11008,0,170,10922,43712,0,0,0,18,7746,
  597.   16000,500,31,16384,43690,43693,16384,170,43688,20480,0,341,43690,43520,0,0,0,4,7692,
  598.   3968,124,7,49153,46421,21824,128,45,21844,38928,0,512,23381,21520,0,0,0,84,48706,
  599.   3456,108,6,49152,0,16,64,63,65535,65288,0,2,0,0,0,0,0,12,7700,
  600.   11904,5492,151,16384,0,16,128,143,65535,65424,0,8192,0,0,0,0,0,32,48706,
  601.   23616,226,46,8192,0,0,8272,64,4,18378,0,8194,0,16,0,0,0,9,7692,
  602.   35840,2656,70,0,0,16,4128,256,4,756,0,49152,0,8,0,0,0,66,48674,
  603.   11456,102,6,24576,8192,128,33820,64,23,4339,32769,1298,256,0,0,0,0,20,7684,
  604.   3072,1392,174,1,2633,8788,17412,40,18702,5498,32768,17088,37961,10248,0,0,0,36,48684,
  605.   23616,4326,6,8192,0,17,43532,284,32764,861,32769,1026,0,0,0,0,0,8,40450,
  606.   35840,1128,86,0,8192,0,5386,76,49158,2461,16385,34440,0,16,0,0,0,64,15924,
  607.   11456,6506,6,24576,35156,38028,1024,140,1184,14,13,33801,42154,36880,0,0,0,17,7690,
  608.   3584,104,175,2,8705,8704,128,44,49429,16558,3,32768,2304,8192,0,0,0,40,48676,
  609.   23744,6890,6,24579,34964,18598,0,302,1088,196,4,3188,49738,34880,0,0,0,0,7730,
  610.   35840,104,86,0,0,2,8260,76,49152,42052,3,48,0,0,0,0,0,83,7748,
  611.   3136,6506,6,8192,0,0,4864,156,0,516,4,0,0,0,0,0,0,4,7716,
  612.   7168,104,142,0,0,0,768,12,16384,100,2,640,0,0,0,0,0,40,7778,
  613.   19648,6890,6,24576,0,0,256,334,32768,289,0,1408,0,0,0,0,0,0,15876,
  614.   3584,104,87,0,0,0,514,44,16384,129,0,6144,0,0,0,0,0,80,40550,
  615.   23616,5482,6,24576,0,0,4096,157,0,296,16385,1152,0,0,0,0,0,4,7714,
  616.   3328,104,174,0,0,0,2560,13,16384,13,49154,2624,0,0,0,0,0,34,7716,
  617.   44352,6514,6,8192,0,0,258,173,0,308,16386,34192,0,0,0,0,0,16,48706,
  618.   3328,608,70,0,34,8720,1028,13,16384,426,8,348,8737,0,0,0,0,68,40484,
  619.   23872,6498,46,24576,40,43652,258,349,0,8,0,170,21842,8192,0,0,0,17,15942,
  620.   3328,224,70,0,33,21760,1540,13,16384,4,3,16468,27296,0,0,0,0,36,7714,
  621.   44352,6242,22,8192,512,2,2,172,0,0,4,40960,8,0,0,0,0,1,7716,
  622.   3072,608,135,16384,8,2,262,12,16384,0,0,49154,0,128,0,0,0,84,7748,
  623.   23616,6498,46,24576,0,0,263,348,0,0,0,61440,8,0,0,0,0,1,7716,
  624.   3072,224,70,0,290,43520,2310,12,16384,0,0,288,3,0,0,0,0,40,15970,
  625.   44096,6242,22,8194,33280,17408,256,141,0,0,0,1808,8736,49184,0,0,0,2,40452,
  626.   3328,608,71,16384,34338,8576,6,93,16384,0,0,1385,23186,8192,0,0,0,80,15972,
  627.   23872,354,22,8197,1,5128,0,141,0,0,0,2564,8192,4112,0,0,0,10,40484,
  628.   3328,1248,166,4,16394,44368,6,13,16384,0,0,682,43688,51200,0,0,0,32,7730,
  629.   44352,2146,22,24578,23520,0,2304,285,0,0,0,0,4,25600,0,0,0,9,7748,
  630.   3328,664,79,0,192,0,514,12,16384,0,0,0,1,12288,0,0,0,68,7724,
  631.   23872,130,6,24576,768,0,6144,13,0,0,0,0,0,24576,0,0,0,17,7746,
  632.   3328,2388,262,3,384,0,6,174,16384,0,0,0,0,5120,0,0,0,68,24644,
  633.   44352,3434,110,8192,39168,0,512,29,0,0,0,0,0,5120,0,0,0,17,2764,
  634.   3072,104,70,2,1024,0,262,268,16384,0,0,0,0,4096,0,0,0,48,10274,
  635.   23616,8,118,24576,4480,0,6912,12,0,0,0,0,0,5120,0,0,0,10,11588,
  636.   3072,8,399,0,2048,1,33282,156,16384,0,0,0,0,4096,0,0,0,34,43784,
  637.   44096,0,12,8193,296,43680,4096,12,16384,0,0,43690,43681,20480,0,0,0,67,21776,
  638.   3082,45209,1308,32771,17,21826,2058,172,16384,0,2,43701,21828,0,0,0,0,77,27972,
  639.   23562,43010,4664,40960,98,46757,16388,12,24576,0,2,56150,56162,544,0,0,0,21,21922,
  640.   3083,21867,10480,16386,20488,16,260,348,16384,0,0,0,16,1344,0,0,0,36,10536,
  641.   44351,65535,65472,16388,6152,16,94,12,0,0,0,0,0,80,0,0,0,17,20608,
  642.   3711,65535,32581,49152,1024,0,0,172,16384,0,0,0,16,80,0,0,0,16,33312,
  643.   23296,1,33032,8192,5896,16,16,12,0,0,0,0,0,61888,0,0,0,10,9280,
  644.   0,3,0,0,12296,34833,7008,172,16384,0,0,17476,17496,51360,0,0,0,0,0,
  645.   41489,1,36913,0,24066,8834,8224,43,49152,0,2,4369,4352,14336,0,0,0,0,0,
  646.   2180,18773,576,0,8,16,16,456,0,0,0,0,16,64,0,0,0,0,0,
  647.   53247,65535,32821,0,57352,24,6528,490,0,0,0,0,0,0,0,0,0,0,0,
  648.   57344,1,49900,0,385,18732,7296,426,0,0,6,43594,19020,17408,0,0,0,0,0,
  649.   51882,38024,64,0,1876,4608,22784,48,32768,0,0,272,37002,11264,0,0,0,0,0,
  650.   32768,16930,17728,0,832,16518,16384,3,0,0,0,21572,1041,24576,0,0,0,0,0
  651. };
  652.  
  653. // About bitmap has 2 blank lines around it in every direction.
  654. UWORD chip AboutData[456] =
  655. { /* Plane 0 */
  656.   0,0,0,
  657.   0,0,0,
  658.   4352,0,0,
  659.   4704,0,0,
  660.   2688,1024,0,
  661.   9984,1024,0,
  662.   8128,3584,0,
  663.   1824,3584,0,
  664.   2688,3840,0,
  665.   12864,3840,0,
  666.   1090,34688,0,
  667.   3,51072,128,
  668.   7,33728,256,
  669.   7,33728,1024,
  670.   15375,65535,65216,
  671.   15375,65504,1024,
  672.   7711,57584,256,
  673.   2591,61680,1152,
  674.   60,31864,1024,
  675.   60,7800,0,
  676.   1340,1980,0,
  677.   2040,1020,0,
  678.   1008,254,0,
  679.   1008,126,0,
  680.   480,31,0,
  681.   480,15,0,
  682.   0,0,0,
  683.   0,0,0,
  684.   0,0,0,
  685.   3643,37347,34944,
  686.   4388,37412,19584,
  687.   4388,37380,19584,
  688.   7972,37383,51840,
  689.   4388,37476,18816,
  690.   4388,37412,18816,
  691.   4384,37348,18560,
  692.   0,0,0,
  693.   0,0,0,
  694.   /* Plane 1 */
  695.   0,0,0,
  696.   0,0,0,
  697.   4352,14336,0,
  698.   4704,14336,0,
  699.   2688,30720,0,
  700.   9984,30720,0,
  701.   8128,61440,0,
  702.   1824,61440,0,
  703.   2689,57344,0,
  704.   12865,57344,0,
  705.   1089,16384,1024,
  706.   0,0,9216,
  707.   0,0,4096,
  708.   0,0,1024,
  709.   0,0,65216,
  710.   0,0,1024,
  711.   0,0,4352,
  712.   5140,0,8320,
  713.   3900,0,0,
  714.   3900,0,0,
  715.   1980,0,0,
  716.   2040,0,0,
  717.   1008,0,0,
  718.   1008,0,0,
  719.   480,0,0,
  720.   480,0,0,
  721.   0,0,0,
  722.   0,0,0,
  723.   0,0,0,
  724.   3643,37347,34944,
  725.   4388,37412,19584,
  726.   4388,37380,19584,
  727.   7972,37383,51840,
  728.   4388,37476,18816,
  729.   4388,37412,18816,
  730.   4384,37348,18560,
  731.   0,0,0,
  732.   0,0,0,
  733.   /* Plane 2 */
  734.   0,0,0,
  735.   0,0,0,
  736.   4352,0,0,
  737.   4704,0,0,
  738.   2688,0,0,
  739.   9984,0,0,
  740.   8128,0,0,
  741.   1824,0,0,
  742.   2688,0,0,
  743.   12864,0,0,
  744.   1090,32768,1024,
  745.   3,49152,9344,
  746.   7,32768,4352,
  747.   7,32768,1024,
  748.   15375,0,65024,
  749.   15375,0,1024,
  750.   7710,0,256,
  751.   7690,0,1152,
  752.   3840,0,1024,
  753.   3840,0,0,
  754.   1920,0,0,
  755.   1920,0,0,
  756.   768,0,0,
  757.   768,0,0,
  758.   0,0,0,
  759.   0,0,0,
  760.   0,0,0,
  761.   0,0,0,
  762.   0,0,0,
  763.   3643,37347,34944,
  764.   4388,37412,19584,
  765.   4388,37380,19584,
  766.   7972,37383,51840,
  767.   4388,37476,18816,
  768.   4388,37412,18816,
  769.   4384,37348,18560,
  770.   0,0,0,
  771.   0,0,0,
  772.   /* Plane 3 */
  773.   0,0,0,
  774.   0,0,0,
  775.   4352,14336,0,
  776.   4704,14336,0,
  777.   2688,30720,0,
  778.   9984,30720,0,
  779.   8128,61440,0,
  780.   1824,61440,0,
  781.   2689,57344,0,
  782.   12865,57344,0,
  783.   1091,49152,0,
  784.   3,49152,8320,
  785.   7,32768,4352,
  786.   7,32768,1024,
  787.   15,0,65216,
  788.   15,0,1024,
  789.   30,0,4096,
  790.   30,0,8192,
  791.   60,0,0,
  792.   60,0,0,
  793.   60,0,0,
  794.   120,0,0,
  795.   240,0,0,
  796.   240,0,0,
  797.   480,0,0,
  798.   480,0,0,
  799.   0,0,0,
  800.   0,0,0,
  801.   0,0,0,
  802.   3643,37347,34944,
  803.   4388,37412,19584,
  804.   4388,37380,19584,
  805.   7972,37383,51840,
  806.   4388,37476,18816,
  807.   4388,37412,18816,
  808.   4384,37348,18560,
  809.   0,0,0,
  810.   0,0,0
  811. };
  812.  
  813. // PRIVATE STRUCTURES -----------------------------------------------------
  814.  
  815. struct Image Logo =
  816. {   0, 0,
  817.     304, 118, 4,
  818.     LogoData,
  819.     0x0f, 0x0,
  820.     NULL
  821. };
  822. struct Image About =
  823. {   0, 0,
  824.     44, 38, 4,
  825.     AboutData,
  826.     0x0f, 0x0,
  827.     NULL
  828. };
  829. MODULE struct EasyStruct EasyStruct =
  830. {   sizeof(struct EasyStruct),
  831.     0,
  832.     TITLEBAR,
  833.     "Fieldset/highscores have been modified.",
  834.     "Continue|Cancel"
  835. };
  836. struct
  837. {   WORD x, y;
  838.     STRPTR text;
  839. } about[ABOUTLINES + 1] =
  840. {   {72,  27, "Worm Wars 7.21a for Amiga" },
  841.     {72,  35, "Monday 21 October 2002"    },
  842.     {72,  51, "© 2002 Amigan Software"    },
  843.     {72,  59, "By James R. Jacobs"        },
  844.     {16,  75, "Fieldset size:       bytes"},
  845.     {16,  91, "Kickstart:"                },
  846.     {16,  99, "Workbench:"                }
  847. };
  848. struct
  849. {   UBYTE scancode;
  850.     BYTE  player, deltax, deltay, special;
  851.     BOOL  down;
  852. } key[NUMKEYS + 1] =
  853. {   {Q,               0, -1, -1, MOVE,     FALSE},
  854.     {W,               0,  0, -1, MOVE,     FALSE},
  855.     {E,               0,  1, -1, MOVE,     FALSE},
  856.     {A,               0, -1,  0, MOVE,     FALSE},
  857.     {S,               0,  0,  1, MOVE,     FALSE},
  858.     {D,               0,  1,  0, MOVE,     FALSE},
  859.     {Z,               0, -1,  1, MOVE,     FALSE},
  860.     {KEY_X,           0,  1,  1, MOVE,     FALSE},
  861.     {C,               0,  1,  1, MOVE,     FALSE},
  862.     {NUMERICSEVEN,    1, -1, -1, MOVE,     FALSE},
  863.     {NUMERICEIGHT,    1,  0, -1, MOVE,     FALSE},
  864.     {NUMERICNINE,     1,  1, -1, MOVE,     FALSE},
  865.     {NUMERICFOUR,     1, -1,  0, MOVE,     FALSE},
  866.     {NUMERICFIVE,     1,  0,  1, MOVE,     FALSE},
  867.     {NUMERICSIX,      1,  1,  0, MOVE,     FALSE},
  868.     {NUMERICONE,      1, -1,  1, MOVE,     FALSE},
  869.     {NUMERICTWO,      1,  0,  1, MOVE,     FALSE},
  870.     {NUMERICTHREE,    1,  1,  1, MOVE,     FALSE},
  871.     {UP,              1,  0, -1, ONEHUMAN, FALSE},
  872.     {DOWN,            1,  0,  1, ONEHUMAN, FALSE},
  873.     {RIGHT,           1,  1,  0, ONEHUMAN, FALSE},
  874.     {LEFT,            1, -1,  0, ONEHUMAN, FALSE},
  875.     {SPACEBAR,        0,  0,  0, AMMO,     FALSE},
  876.     {NUMERICZERO,     1,  0,  0, AMMO,     FALSE},
  877.     {ENTER,           1,  0,  0, AMMO,     FALSE},
  878.     {HELP,            0,  0,  0, TRAINER,  FALSE},
  879.     {NUMERICSLASH,    0,  0,  0, TRAINER,  FALSE},
  880.     {NUMERICASTERISK, 0,  0,  0, TRAINER,  FALSE},
  881.     {NUMERICPLUS,     0,  0,  0, TRAINER,  FALSE}
  882. }; /* Never leave unused keys in this structure. */
  883.  
  884. /* #DEFINES -------------------------------------------------------------- */
  885.  
  886. #define ID_8SVX   MAKE_ID('8','S','V','X')
  887. #define ID_BODY   MAKE_ID('B','O','D','Y')
  888. #define ID_VHDR   MAKE_ID('V','H','D','R')
  889. #define PALCLOCK  3546895
  890. #define NTSCCLOCK 3579545
  891. #define SOFT      32
  892. #define LOUD      64 /* = Unity */
  893.  
  894. /* PRIVATE STRUCTURES ---------------------------------------------------- */
  895.  
  896. #define INDEX_ANIMATIONS  21
  897. #define INDEX_CREATEICONS 22
  898. #define INDEX_THICKTAILS  23
  899.  
  900. struct NewMenu NewMenu[29 + 1] =
  901. {   { NM_TITLE, "Project",        0 , 0,                    0, 0}, //  0
  902.     {  NM_ITEM, "New",           "N", 0,                    0, 0}, //  1
  903.     {  NM_ITEM, "Open...",       "O", 0,                    0, 0}, //  2
  904.     {  NM_ITEM, "Revert",        "R", 0,                    0, 0}, //  3
  905.     {  NM_ITEM, NM_BARLABEL,      0 , 0,                    0, 0}, //  4
  906.     {  NM_ITEM, "Save",          "S", 0,                    0, 0}, //  5
  907.     {  NM_ITEM, "Save As...",    "A", 0,                    0, 0}, //  6
  908.     {  NM_ITEM, NM_BARLABEL,      0 , 0,                    0, 0}, //  7
  909.     {  NM_ITEM, "Delete...",     "D", 0,                    0, 0}, //  8
  910.     {  NM_ITEM, NM_BARLABEL,      0 , 0,                    0, 0}, //  9
  911.     {  NM_ITEM, "Quit",          "Q", 0,                    0, 0}, // 10
  912.     { NM_TITLE, "Edit",           0 , NM_MENUDISABLED,      0, 0}, // 11
  913.     {  NM_ITEM, "Cut",           "X", 0,                    0, 0}, // 12
  914.     {  NM_ITEM, "Copy",          "C", 0,                    0, 0}, // 13
  915.     {  NM_ITEM, "Paste",         "V", 0,                    0, 0}, // 14
  916.     {  NM_ITEM, NM_BARLABEL,      0 , 0,                    0, 0}, // 15
  917.     {  NM_ITEM, "Erase",         "E", 0,                    0, 0}, // 16
  918.     {  NM_ITEM, "Delete",         0 , 0,                    0, 0}, // 17
  919.     {  NM_ITEM, "Insert",         0 , 0,                    0, 0}, // 18
  920.     {  NM_ITEM, "Append",         0 , 0,                    0, 0}, // 19
  921.     { NM_TITLE, "Settings",       0 , 0,                    0, 0}, // 20
  922.     {  NM_ITEM, "Animations?",   "T", CHECKIT | MENUTOGGLE, 0, 0}, // 21
  923.     {  NM_ITEM, "Create Icons?", "I", CHECKIT | MENUTOGGLE, 0, 0}, // 22
  924.     {  NM_ITEM, "Thick Tails?",  "H", CHECKIT | MENUTOGGLE, 0, 0}, // 23
  925.     { NM_TITLE, "Help",           0 , 0,                    0, 0}, // 24
  926.     {  NM_ITEM, "Creatures...",  "1", 0,                    0, 0}, // 25
  927.     {  NM_ITEM, "Objects...",    "2", 0,                    0, 0}, // 26
  928.     {  NM_ITEM, NM_BARLABEL,      0 , 0,                    0, 0}, // 27
  929.     {  NM_ITEM, "About...",      "?", 0,                    0, 0}, // 30
  930.     {   NM_END, NULL,             0 , 0,                    0, 0}  // 31
  931. };
  932.  
  933. struct GamePortTrigger Trigger =
  934. {   GPTF_DOWNKEYS,
  935.     65535,
  936.     1, 1
  937. };
  938.  
  939. // gadgets
  940. struct NewGadget StringGadget =
  941. {   235, 0,
  942.     181, 12,
  943.     NULL,
  944.     NULL,
  945.     NULL,
  946.     NULL,
  947.     NULL,
  948.     NULL
  949. };
  950. struct NewGadget PlayGadget =
  951. {   256, TSOFFSET + 124,
  952.     128, 12,
  953.     "Play Game",
  954.     NULL,
  955.     NULL,
  956.     NULL,
  957.     NULL,
  958.     NULL
  959. };
  960. struct NewGadget FEGadget =
  961. {   256, TSOFFSET + 140,
  962.     128, 12,
  963.     "Field Editor",
  964.     NULL,
  965.     NULL,
  966.     NULL,
  967.     NULL,
  968.     NULL
  969. };
  970. struct NewGadget RandomGadget =
  971. {   370, TSOFFSET + 170,
  972.     0, 0,
  973.     NULL,
  974.     NULL,
  975.     NULL,
  976.     NULL,
  977.     NULL
  978. };
  979. struct NewGadget CycleGadget =
  980. {   288, 0,
  981.     128, 13,
  982.     NULL,
  983.     NULL,
  984.     NULL,
  985.     NULL,
  986.     NULL,
  987.     NULL
  988. };
  989.  
  990. struct
  991. {   STRPTR filename;
  992.     BYTE   volume;
  993.     ULONG  length[2], size, speed, bank;
  994.     UBYTE* base;
  995. } samp[SAMPLES + 1] =
  996. {   {   "PROGDIR:fx/dogawakens.8svx", SOFT}, /* FXBORN_DOG */
  997.     {     "PROGDIR:fx/dripborn.8svx", SOFT}, /* FXBORN_DRIP */
  998.     {     "PROGDIR:fx/goatborn.8svx", SOFT}, /* FXBORN_GOAT */
  999.     {"PROGDIR:fx/missileactive.8svx", LOUD}, /* FXBORN_MISSILE */
  1000.     {      "PROGDIR:fx/orbborn.8svx", SOFT}, /* FXBORN_ORB */
  1001.     {  "PROGDIR:fx/penguinborn.8svx", SOFT}, /* FXBORN_PENGUIN */
  1002.     {"PROGDIR:fx/protectorborn.8svx", SOFT}, /* FXBORN_PROTECTOR */
  1003.     {         "PROGDIR:fx/thud.8svx", SOFT}, /* FXDEATH_FRAGMENT (thud) */
  1004.     {    "PROGDIR:fx/wormdeath.8svx", LOUD}, /* FXDEATH_WORM */
  1005.     { "PROGDIR:fx/timebombtick.8svx", LOUD}, /* FXDO_BOMB (tick) */
  1006.     {    "PROGDIR:fx/enclosure.8svx", LOUD}, /* FXDO_ENCLOSE */
  1007.     {     "PROGDIR:fx/goatfire.8svx", SOFT}, /* FXDO_GOAT (fire) */
  1008.     {         "PROGDIR:fx/jump.8svx", SOFT}, /* FXDO_JUMP */
  1009.     {     "PROGDIR:fx/orbsplit.8svx", SOFT}, /* FXDO_ORB (split) */
  1010.     {      "PROGDIR:fx/getammo.8svx", LOUD}, /* FXGET_AMMO */
  1011.     {      "PROGDIR:fx/cyclone.8svx", LOUD}, /* FXGET_CYCLONE */
  1012.     {           "PROGDIR:fx/fx.8svx", SOFT}, /* FXGET_DRIP */
  1013.     {    "PROGDIR:fx/getgrower.8svx", SOFT}, /* FXGET_GROWER */
  1014.     {    "PROGDIR:fx/getobject.8svx", SOFT}, /* FXGET_OBJECT */
  1015.     {   "PROGDIR:fx/getpowerup.8svx", LOUD}, /* FXGET_POWERUP */
  1016.     {      "PROGDIR:fx/explode.8svx", SOFT}, /* FXGET_PULSE (explode) */
  1017.     {     "PROGDIR:fx/getskull.8svx", SOFT}, /* FXGET_SKULL */
  1018.     {       "PROGDIR:fx/amigan.8svx", SOFT}, /* FXHELP */
  1019.     {        "PROGDIR:fx/shoot.8svx", SOFT}, /* FXUSE_AMMO */
  1020.     {    "PROGDIR:fx/usearmour.8svx", SOFT}, /* FXUSE_ARMOUR */
  1021.     {    "PROGDIR:fx/bombblast.8svx", SOFT}, /* FXUSE_BOMB */
  1022.     {  "PROGDIR:fx/useteleport.8svx", SOFT}, /* FXUSE_TELEPORT */
  1023.     {    "PROGDIR:fx/usetongue.8svx", SOFT}, /* FXBORN_BIRD */
  1024.     {        "PROGDIR:fx/green.8svx", SOFT}, /* FXPAIN */
  1025.     {          "PROGDIR:fx/red.8svx", SOFT},
  1026.     {         "PROGDIR:fx/blue.8svx", SOFT},
  1027.     {       "PROGDIR:fx/yellow.8svx", SOFT},
  1028.     {    "PROGDIR:fx/highscore.8svx", SOFT}, /* FXAPPLAUSE (after each new hiscore) */
  1029.     {       "PROGDIR:fx/defeat.8svx", LOUD}, /* FXGAMEOVER (if all worms are dead) */
  1030.     {      "PROGDIR:fx/victory.8svx", SOFT}, /* FXCELEBRATE (if game succeeded) */
  1031.     {        "PROGDIR:fx/click.8svx", SOFT}, /* FXCLICK (rundown, keypresses) */
  1032.     {  "PROGDIR:fx/titlescreen.8svx", SOFT}, /* FXLAUNCH (title screen) */
  1033.     {   "PROGDIR:fx/endoflevel.8svx", LOUD}, /* FXRIFF (after each rundown) */
  1034.     {    "PROGDIR:fx/timealert.8svx", SOFT}  /* FXSIREN (out of time) */
  1035. };
  1036.  
  1037. /* ARRAYS -------------------------------------------------------------- */
  1038.  
  1039. MODULE UBYTE* CycleOptions[4][6] =
  1040. { { (UBYTE *) "None",
  1041.     (UBYTE *) "Amiga",
  1042.     (UBYTE *) "Joystick 3",
  1043.     (UBYTE *) "Gamepad 3",
  1044.     (UBYTE *) "Lt. Kybd",
  1045.     NULL
  1046.   },
  1047.   { (UBYTE *) "None",
  1048.     (UBYTE *) "Amiga",
  1049.     (UBYTE *) "Joystick 4",
  1050.     (UBYTE *) "Gamepad 4",
  1051.     (UBYTE *) "Rt. Kybd",
  1052.     NULL
  1053.   },
  1054.   { (UBYTE *) "None",
  1055.     (UBYTE *) "Amiga",
  1056.     (UBYTE *) "Joystick 2",
  1057.     (UBYTE *) "Gamepad 2",
  1058.     NULL,
  1059.     NULL
  1060.   },
  1061.   { (UBYTE *) "None",
  1062.     (UBYTE *) "Amiga",
  1063.     (UBYTE *) "Joystick 1",
  1064.     (UBYTE *) "Gamepad 1",
  1065.     NULL,
  1066.     NULL
  1067. } };
  1068.  
  1069. MODULE STRPTR sfxerror[] =
  1070. {   "No errors.",
  1071.     "Can't open file!",
  1072.     "Can't read file!",
  1073.     "Not an IFF 8SVX; too short!",
  1074.     "Not an IFF FORM!",
  1075.     "No memory for read!",
  1076.     "Read error!",
  1077.     "Malformed IFF; too short!",
  1078.     "Not an IFF 8SVX!",
  1079.     "No chip memory!"
  1080. };
  1081.  
  1082. /* PUBLIC STRUCTURES ----------------------------------------------------- */
  1083.  
  1084. struct Chunk
  1085. {   LONG          ckID;
  1086.     LONG          ckSize;
  1087.     LONG          ckType;
  1088.     void*         ckData;
  1089.     struct Chunk* ckNext;
  1090. };
  1091.  
  1092. /* TYPEDEFS --------------------------------------------------------------- */
  1093.  
  1094. typedef LONG Fixed;          /* A fixed-point value, 16 bits to the left
  1095.                                 of the point and 16 to the right. A Fixed
  1096.                                 is a number of 2**16ths, ie. 65536ths. */
  1097. typedef struct
  1098. {   ULONG oneShotHiSamples,  /* # samples in the high octave 1-shot part */
  1099.           repeatHiSamples,   /* # samples in the high octave repeat part */
  1100.           samplesPerHiCycle; /* # samples/cycle in high octave, else 0 */
  1101.     UWORD samplesPerSec;     /* data sampling rate */
  1102.     UBYTE ctOctave,          /* # of octaves of waveforms */
  1103.           sCompression;      /* data compression technique used */
  1104.     Fixed volume;            /* playback nominal volume from 0 to Unity
  1105.                                 (full volume). Map this value into the
  1106.                                 output hardware's dynamic range (0-64). */
  1107. } Voice8Header;
  1108.  
  1109. /* Must have blank line at EOF. */
  1110.